using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.Xml.Linq;
namespace Entidades
{
	public class Perfil
	{
		private const string __ErrorAlta = "No se pudo dar el alta (Perfil), ";
		private const string __ErrorBaja = "No se pudo dar la baja (Perfil), ";
		private const string __ErrorModificacion = "No se pudo hacer la modificacion (Perfil), ";
		private const string __ErrorTraerUno = "No se pudo Traer Uno (Perfil), ";
		private const string __ErrorTraerTodos = "No se pudo Traer Todos (Perfil), ";
		private int _Id;
		private int _IdUsuario;
		private string _Apellido;
		private string _Nombre;
		private DateTime? _FechaNacimiento;
		private string _Sexo;
		private int _Telefono;
        private int _Tema;

		private DateTime? _FechaModificacion;
		#region "Propiedades"
		public int Id {
			get { return _Id; }
			set { _Id = value; }
		}
		public int IdUsuario {
			get { return _IdUsuario; }
			set { _IdUsuario = value; }
		}
		public string Apellido {
			get { return _Apellido; }
			set { _Apellido = value; }
		}
		public string Nombre {
			get { return _Nombre; }
			set { _Nombre = value; }
		}


        public int Tema
        {
            get { return _Tema; }
            set { _Tema = value; }
        }
                
		public DateTime? FechaNacimiento {
			get { return _FechaNacimiento; }
			set { _FechaNacimiento = value; }
		}
		public string Sexo {
			get { return _Sexo; }
			set { _Sexo = value; }
		}
		public int Telefono {
			get { return _Telefono; }
			set { _Telefono = value; }
		}
		public DateTime? FechaModificacion {
			get { return _FechaModificacion; }
			set { _FechaModificacion = value; }
		}
		#endregion
		#region "Lazys"
		private Usuario _Usuario;
		public Usuario Usuario {
			get {
				if (_Usuario == null) {
					_Usuario = new Usuario(_IdUsuario);
				}
				return _Usuario;
			}
		}
		#endregion
		public Perfil()
		{
             _Apellido = "";
             _Nombre = "";
             _Sexo = "";
		}
		public Perfil(int Id)
		{
			Perfil perfil = traerUno(Id);
            this._Id = perfil.Id;
            this._IdUsuario = perfil.IdUsuario;
            this._Apellido = perfil.Apellido;
            this._Nombre = perfil.Nombre;
            this._FechaNacimiento = perfil.FechaNacimiento;
            this._Sexo = perfil.Sexo;
            this._Telefono = perfil.Telefono;
            this._Tema= perfil.Tema;
            this._FechaModificacion = perfil.FechaModificacion;
		}
		#region "Metodos Publicos"
		public void Alta()
		{
			try {
				validaAlta();
				DALPerfil.Alta(this);
			} catch (Exception ex) {
				throw new Exception(__ErrorAlta + ex.Message);
			}
		}
		public void Baja()
		{
			try {
				validaBaja();
				DALPerfil.Baja(_Id);
			} catch (Exception ex) {
				throw new Exception(__ErrorBaja + ex.Message);
			}
		}
		public void Modificar()
		{
			try {
				validaModificacion();
				DALPerfil.Modificar(this);
			} catch (Exception ex) {
				throw new Exception(__ErrorModificacion + ex.Message);
			}
		}
		#region "Metodos Estaticos"
		private Perfil traerUno(int Id)
		{
			try {
				return DALPerfil.traerUno(Id);
			} catch (Exception ex) {
				throw new Exception(__ErrorTraerUno + ex.Message);
			}
		}
		public static List<Perfil> TraerTodos()
		{
			try {
				return DALPerfil.TraerTodos();
			} catch (Exception ex) {
				throw new Exception(__ErrorTraerTodos + ex.Message);
			}
		}

        public static List<Perfil> TraerTodosPorSexo(string sexo)
        {
            try
            {
                return DALPerfil.TraerTodosPorSexo(sexo);
            }
            catch (Exception ex)
            {
                throw new Exception(__ErrorTraerTodos + ex.Message);
            }
        }


		#region "Lazys"

		public static Perfil getOneByIdUsuario(int IdUsuario)
		{
			try {
				return DALPerfil.getOneByIdUsuario(IdUsuario);
			} catch (Exception ex) {
				throw new Exception("ErrorDeLazyLoad(Perfil)" + ex.Message);
			}
		}
		#endregion
		#endregion
		#endregion
		#region "Metodos Privados"
		private void validaAlta()
		{
			//lanza excepcion si no valida
			//ej If _Descripcion = " Then Throw New Exception("la descripcion no debe estar vacia")
		}
		private void validaBaja()
		{
			//lanza excepcion si no valida
		}
		private void validaModificacion()
		{
			//lanza excepcion si no valida
			//ej If _Descripcion = " Then Throw New Exception("la descripcion no debe estar vacia")
			validaAlta();
		}
		#endregion





    }
}
